// 对axios网络请求方法 进行二次封装
import axios from 'axios';
import { message } from 'ant-design-vue';
// import qs from 'querystring'

const request = axios.create({
  baseURL: ' https://mock.mengxuegu.com/mock/67e60e19f580f4295ab68e1a/api', //import.meta.env.VITE_APP_BASE_API
  timeout: 5000,
});

// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    //config发送请求的配置参数信息
    //config可以判断请求的方式get/post 请求url参数地址 headers请求头配置 参数data发送的数据等信息
    // console.log('config-请求拦截器',config);
    //对post请求处理参数
    // if (config.method == 'post') {
    //   config.data = qs.stringify(config.data)
    // }
    // 在发送请求之前做些什么--对post请求参数 处理字符串拼接
    console.log(config.url);
    if (config.url === '/user/info') {
      const tokenObj = localStorage.getItem('user-access-token');
      if (tokenObj) {
        const tokenData = JSON.parse(tokenObj);
        const token = tokenData.token;
        if (token) {
          config.headers.Authorization = `Bearer ${token}`;
        }
      }
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 添加响应拦截器 -- 对错误的数据处理参数
//网络请求常见错误信息
// 404 地址接口错误  500 505 服务器错误 200 成功  300 重定向
request.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response.data.data;
  },
  function (error) {
    // 对响应错误做点什么
    const { response } = error;
    //response.status 错误状态   500 服务器错误  response.info 信息提示
    let msg = errorHandle(response.status, response.info);
    message.warning(msg);
    return Promise.reject(error);
  },
);

//错误响应处理提示信息
function errorHandle(status: number, info: any) {
  switch (status) {
    case 400:
      return '400-表示请求报文中存在语法错误';
    case 401:
      return '401-未经许可，需要通过HTTP认证';
    case 403:
      return '403-服务器拒绝该次访问（访问权限出现问题）';
    case 404:
      return '404-表示服务器上无法找到请求的资源';
    case 500:
      return '500-表示服务器在执行请求时发生了错误';
    case 503:
      return '503-表示服务器暂时处于超负载或正在进行停机维护';
    case 504:
      return '504-（网关超时）  服务器作为网关或代理，但是没有及时从上游服务器收到请求';
    default:
      return info;
  }
}
//导出请求
export default request;
